﻿/*-----------------------------------/
/* 
/* 所有全局变量定义及第三方JS插件实现或设置
/* Create By.Ben 20181206
/* 
/*----------------------------------*/
$(document).ready(function () {
    InitialAztechScript();
});

/*-----------------------------------/
/* 用于初始需要全局使用的函数
/* 在子脚本中调用
/*----------------------------------*/
function InitialAztechScript() {
    ResetToastrOption();
    CreateVueHookFunction();
}

/*-----------------------------------/
/* 注册一个全局自定义指令
/*----------------------------------*/
function CreateVueHookFunction() {
    Vue.directive('has-role', {
        inserted: function (el, binding) {
            //判断当前用户是否含有角色ID
            //若不包含则隐藏当前元素
            var result = false;

            if (GlobalUser.getUserInfo() != null) {
                var roleID = binding.value;
                var userRoles = GlobalUser.getUserInfo().UserRoleMappings;
                for (var idx in userRoles) {
                    if (userRoles[idx].RoleID == roleID)
                        result = true;
                }
            }
            if (!result)
                $(el).remove();
        }
    });

    //定义全局Vue函数，判断对象是否不为空
    Vue.prototype.isNotEmptyObject = function (value) {
        return !$.isEmptyObject(value);
    };
}

/*-----------------------------------/
/* TOASTR NOTIFICATION
/* 自定义Alert控件属性设置
/* Vue中Mounted加载比JQuery.Ready前，如果在Mounted中需要弹出框，需提前调用此方法
/* 使用方法：
/* toastr.info("xxxx")
/* toastr.warning("xxxx")
/* toastr.success("xxxx")
/* toastr.error("xxxx")
/*----------------------------------*/
function ResetToastrOption() {
    toastr.options = {
        closeButton: false,                             //  是否显示关闭按钮，（提示框右上角关闭按钮）
        debug: false,                                   //  是否使用deBug模式
        progressBar: true,                              //  是否显示进度条，（设置关闭的超时时间进度条）
        positionClass: "toast-bottom-center",           //  设置提示款显示的位置
        onclick: null,                                  //  点击消息框自定义事件 
        showDuration: "300",                            //  显示动画的时间
        hideDuration: "1000",                           //  消失的动画时间
        timeOut: "3000",                                //  自动关闭超时时间 
        extendedTimeOut: "",                            //  加长展示时间
        showEasing: "swing",                            //  显示时的动画缓冲方式
        hideEasing: "linear",                           //  消失时的动画缓冲方式
        showMethod: "fadeIn",                           //  显示时的动画方式
        hideMethod: "fadeOut"                           //  消失时的动画方式
    }    
}

/*-----------------------------------/
/* 返回登入页面
/*----------------------------------*/
function RedirectLogin() {
    //删除之前登入信息
    window.location.href = "/Account/Logout";
}

/*-----------------------------------/
/* 实现自定义加载图片显示
/* 在/Share/_Layout.cshtml和自定义Modal中都有加载图片
/* 在Modal子页面中需要使用方法：parent.ShowAzLoading() / parent.HideAzLoading()
/*----------------------------------*/
function ShowAzLoading() {
    $(".aztech-loading").show();
    $(".aztech-modal-loading").show();
}

function HideAzLoading() {
    $(".aztech-loading").hide();
    $(".aztech-modal-loading").hide();
}

/*-----------------------------------/
/* 实现自定义Modal+Iframe内容显示
/* 在相对应页面插入modal代码（默认已加入到/Share/_Layout.cshtml）
/* 只要引入此脚本就可以调用打开
/* 示例：OpenAzModal("TitleName", "/Request/url", function() { }, 600);
/*----------------------------------*/
function OpenAzModal(title, url, callback) {
    $(".aztech-modal").modal({
        backdrop: "static",
        keyboard: false,
        show: true
    });
    $(".aztech-modal-title").html(title);
    $(".aztech-modal-iframe").attr("src", url);

    //监听根据内容自适应高度
    $(".aztech-modal").on("shown.bs.modal", function (e) {
        var theHeight = $(".aztech-modal-iframe").contents().find("body").height();
        $(".aztech-modal-iframe").css("height", theHeight);
    });
    //监听关闭时调用回调函数
    $(".aztech-modal").on("hidden.bs.modal", function (e) {
        if (typeof (callback) == "function") {
            callback();
        }
        //需要解除监听事件，否则会重复定义，会导致触发多个相同事件
        $(".aztech-modal").off("shown.bs.modal");
        $(".aztech-modal").off("hidden.bs.modal");
    }); 
    //重置窗口大小
    ResizeAzModal(0);
}

function ResizeAzModal(width) {
    var theWidth = 600
    var theHeight = $(".aztech-modal-iframe").contents().find("body").height();

    //根据参数设定宽度
    if (width > 0) {
        theWidth = width;
    }
    
    $(".aztech-modal-dialog").css("width", theWidth);
    $(".aztech-modal-iframe").css("height", theHeight);
}

/*-----------------------------------/
/* 获取URL中Get请求的参数
/* 示例：xxxx?key=value&key2=value2
/* 使用：GetQueryString(key)
/*----------------------------------*/
function GetQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null)
        return unescape(r[2]);
    return null;
}

/*-----------------------------------/
/* 根据值获取对象中的属性名
/* 如果出项相同的值时，此方法不适用
/* 使用：FindObjectKey(object, value)
/*----------------------------------*/
function FindObjectKey(obj, value) {
    for (key in obj) {
        if (obj[key] == value)
            return key;
    }
}

/*-----------------------------------/
/* 将C#返回的时间格式转成JS时间格式
/* C# 返回的格式是：/Date(-2209104000000)/
/* JS 转换格式是： yyyy-MM-dd
/*----------------------------------*/
function CSharpToJsDate(value) {
    if (value != null && value.length > 0)
        return eval('new ' + eval(value).source).Format("yyyy-MM-dd");
    return "";
}

/*-----------------------------------/
// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
/*----------------------------------*/
Date.prototype.Format = function (fmt) { 
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}
